{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# NAME_Assignment_#3 Interpolation\n",
    "* 姓名\n",
    "* 学号\n",
    "* 邮箱"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<center><font size=5>姓名：冉成林   学号：20201120466   专业：电子科学与技术</font></center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<center><font size=6>Project #2</font></center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<center><font size=5>Understanding root and equation systems</font></center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.1 Lagrange interpolation\n",
    "拉格朗日插值的基本公式为：\n",
    "\n",
    "$$P_{n-1}(x) = a_1L_1(x)+a_2L_2(x)+...+a_iL_i(x)+...+a_nL_n(x)$$\n",
    "\n",
    "或者\n",
    "\n",
    "$$P_{n-1}(x) = \\sum_{i=1}^{n}a_iL_i(x)$$\n",
    "\n",
    "其中：\n",
    "\n",
    "$$a_i = y_i$$\n",
    "\n",
    "$$L_i(x)=\\frac{x-x_1}{x_i-x_1}\n",
    "\\frac{x-x_2}{x_i-x_2}\n",
    "\\frac{...}{...}\n",
    "\\frac{x-x_{i-1}}{x_i-x_{i-1}}\n",
    "\\frac{x-x_{i+1}}{x_i-x_{i+1}}\n",
    "\\frac{...}{...}\n",
    "\\frac{x-x_n}{x_i-x_n}$$\n",
    "\n",
    "或者\n",
    "\n",
    "$$L_i(x)=\\prod_{j \\neq i}^{n}\\frac{x-x_j}{x_i-x_j}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从$L_i(x)$的表达式可以看出，其最高次指数为$n-1$，且不存在$\\frac{x-x_i}{x_i-x_i}$项，避免除0错误。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用python进行拉格朗日插值的核心在于用两个循环分别计算$P_{n-1}(x) = \\sum_{i=1}^{n}a_iL_i(x)$和$L_i(x)=\\prod_{j \\neq i}^{n}\\frac{x-x_j}{x_i-x_j}$。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 1. 写出拉格朗日插值的python函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# python fucntion for Lagrange interpolation\n",
    "def interpLag(x, xiList, yiList):\n",
    "    # 计算由xiList和yiList已知数据点的拉格朗日插值多项式函数\n",
    "    \n",
    "    # 首先将xiList和yiList转换成numpy数组，以便于进行数据处理\n",
    "    xiList = np.array(xiList)\n",
    "    yiList = np.array(yiList)\n",
    "    \n",
    "    # 用numberOfxiList表示已知数据点的数目，从而用于后面的循环\n",
    "    numberOfxiList = xiList.size\n",
    "    \n",
    "    # 用y来承载最终计算插值点x处的拉格朗日插值多项式函数的值\n",
    "    y = 0\n",
    "    \n",
    "    # 第一个循环计算最外层的求和迭代\n",
    "    for i in range(numberOfxiList):\n",
    "        \n",
    "        # 计算ai\n",
    "        ai = yiList[i]\n",
    "        \n",
    "        # 初始化li为1\n",
    "        li = 1\n",
    "        \n",
    "        # 第二个循环计算内层的求积迭代\n",
    "        for j in range(numberOfxiList):\n",
    "            \n",
    "            # 当i不等于j的时候才需要进行乘除操作\n",
    "            if i != j:\n",
    "                li = li * (x - xiList[j]) / (xiList[i] - xiList[j])\n",
    "                \n",
    "        # 将每个li乘以ai并加到y上面\n",
    "        y = y + ai * li\n",
    "        \n",
    "    return y # 返回y值以便进行外部处理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 2. 给出插值的数据信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入numpy和画图第三方库matplotlib\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 这是一个magic函数，告诉jupyter notebook如何处理所画出的图的呈现形式，后面的inline意思是将图片插入notebook的页面内显示\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 任意给定已知数据点，这里我们给出了5个数据点\n",
    "xiList = [0, 1, 1.5, 3, 5]\n",
    "yiList = [-1, 2, 3, 1, 3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Y')"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 画图展示已知数据点的分布情况\n",
    "plt.figure(figsize = (8, 6))\n",
    "plt.scatter(xiList, yiList, c = 'white', edgecolors = 'red', s = 100)\n",
    "plt.xlabel(\"X\", fontsize = 20)\n",
    "plt.ylabel(\"Y\", fontsize = 20)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 3. 插值计算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 首先要定义在哪些x处进行插值，这里最好给的数据密集一些\n",
    "# 注意下面使用np.arange(0, 5.1, 0.1)返回的结果不包含5.1\n",
    "\n",
    "xList = np.arange(0, 5.1, 0.1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面代码利用python特有的列表解析语法（List comprehension），将一个循环插入改成一行代码的形式，即\n",
    "```python\n",
    "y = [f(x) for x in someList]\n",
    "```\n",
    "* 注意语法形式，中括号在最外侧\n",
    "* for循环在后面\n",
    "* 函数f可以是任意函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 利用我们上面定义的interpLag函数计算每一个x处的y值，并将结果保存在yList里面\n",
    "\n",
    "yList = [interpLag(x, xiList, yiList) for x in xList]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1ee0b51f2e0>]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 做图比较已知数据点与插值的数据\n",
    "\n",
    "plt.figure(figsize = (8, 6))\n",
    "\n",
    "# 已知数据点\n",
    "plt.scatter(xiList, yiList, c = 'white', edgecolors = 'red', s = 100)\n",
    "plt.xlabel(\"X\", fontsize = 20)\n",
    "plt.ylabel(\"Y\", fontsize = 20)\n",
    "\n",
    "# 插值的数据\n",
    "plt.plot(xList, yList, 'r-')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 4. 插值任意函数\n",
    "\n",
    "* 这里以插值sin(x)进行举例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义已知数据点\n",
    "xiList = np.arange(0, np.pi, 0.1)\n",
    "yiList = np.cos(xiList)\n",
    "\n",
    "# 进行插值计算\n",
    "xList = np.arange(0, np.pi, 0.01)\n",
    "yList = [interpLag(x, xiList, yiList) for x in xList]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1ee0b809dc0>]"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 做图比较\n",
    "plt.figure(figsize = (8, 6))\n",
    "plt.scatter(xiList, yiList, c = 'white', edgecolors = 'red', s = 100)\n",
    "plt.xlabel(\"X\", fontsize = 20)\n",
    "plt.ylabel(\"Y\", fontsize = 20)\n",
    "plt.plot(xList, yList, 'r-')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. 给出任意一个其他函数，并进行插值\n",
    "- 用markdown给出需要插值的函数的形式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid character '，' (U+FF0C) (Temp/ipykernel_15152/802846921.py, line 1)",
     "output_type": "error",
     "traceback": [
      "\u001b[1;36m  File \u001b[1;32m\"C:\\Users\\RCL\\AppData\\Local\\Temp/ipykernel_15152/802846921.py\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m    转换成markdown，并写出函数形式\u001b[0m\n\u001b[1;37m               ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid character '，' (U+FF0C)\n"
     ]
    }
   ],
   "source": [
    "转换成markdown，并写出函数形式"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. 进行插值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在线面给出对应的代码\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "# 在上面给出对应的代码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. 做图比较"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在线面给出对应的代码\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "# 在上面给出对应的代码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
